package com.baizhi.homework;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class FileDemo05 {
    public static void main(String[] args) {
        Map<String, Integer> countFile = getCountFile(new File("F:\\"));
        System.out.println(countFile);
    }

    public static Map<String,Integer> getCountFile(File file){
        //定义一个集合用于统计数据
        Map<String,Integer> map = new HashMap<>();

        File[] files = file.listFiles();
        if(files!=null && files.length>0){
            for (File f : files) {
                //判断f是不是文件
                if(f.isFile()){//是文件 统计
                    String name = f.getName();
                    //获取后缀名先通过.把文件拆分成文件名和后缀
                    String[] arr = name.split("\\.");
                    //文件后缀就是arr[1]
                    if(arr.length>=2){
                        String typeName = arr[arr.length-1];
                        if(map.containsKey(typeName)){//判断集合中是否有该类型，有
                            //存在：
                            Integer count = map.get(typeName); //原来存在几个
                            count++;
                            map.put(typeName,count);
                        }else{//没有
                            //类型不存在
                            map.put(typeName,1);
                        }
                    }

                }else{ //是目录 递归
                    //子目录中的文件个数
                    Map<String, Integer> sonMap = getCountFile(f);
                    //统计子目录中文件类型的个数，最后合并到map中，最终返回map
                    //遍历sonMap
                    Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
                    for (Map.Entry<String, Integer> entry : entries) {
                        String key = entry.getKey();
                        Integer value = entry.getValue();
                        //合并到map中
                        if(map.containsKey(key)){
                            //存在
                            Integer count = map.get(key);
                            count++;
                            map.put(key,count);
                        }else{
                            //不存在
                            map.put(key,value);
                        }
                    }
                }
            }
        }
        return map;
    }
}
